//
//  virtual_func2.hpp
//  learnC++
//
//  Created by liuzhibing on 2018/6/15.
//  Copyright © 2018年 yunfan.com. All rights reserved.
//

#ifndef virtual_func2_hpp
#define virtual_func2_hpp

#include <stdio.h>
#include <iostream>


class A
{
public:
    virtual const char* getName() { return "A"; }
};

class B: public A
{
public:
    const char* getName() { return "B"; }  // note: not virtual
};

class C: public B
{
public:
    const char* getName() { return "C"; } // note: not virtual
};

class D: public C
{
public:
    const char* getName() { return "D"; } // note: not virtual
};

/*
 C c;
 B &rBase = c;
 std::cout << rBase.getName() << '\n';
 
 结果：
 C
 尽管B和C没有被标记为虚拟函数，但A :: getName（）是虚拟的，B :: getName（）和C :: getName（）是重写。 因此，B :: getName（）和C :: getName（）被认为是隐式虚拟的，因此对rBase.getName（）的调用解析为C :: getName（），而不是B :: getName（）。
 
 */


#endif /* virtual_func2_hpp */
